



// 参数
//   路径
//   请求的方式
//   携带的数据
//   数据请求成功要做的事情 --- 回调函数

//   因为参数比较多，按照顺序传参比较麻烦    按照对象传参---没有顺序的问题了
//   前端携带参数的时候    name=value&name=value&name=value  .....
//        把参数也处理成对象  


// ajax({
//     type : 'GET' ,
//     url : ,
//     data : ,
//     cb : d => {}
// })

function ajax(options) {
    // 解构
    const {
        type ,
        url , 
        // 设置默认值
        data = {} ,
        cb ,
        // 默认为异步
        async = true ,
        // 设置返回值的数据类型
        dataType = 'json' 
    } = options ;

    // 把data这个对象变成字符串   {}
    //   遍历对象  for in
    let params = '' ;
    for(let key in data) {
        // params += `${key}=${data[key]}&`
        params += key + '=' + data[key] + '&' ;
    }
    // 最后多一个&
    params = params.substring(0 , params.length - 1) ;


    const xhr = new XMLHttpRequest() ;

    // 判断请求方式  -- 判断不分大小写
    if(type.toLowerCase() === 'get') {
        xhr.open('get' , url + '?' + params , async) ;
        xhr.send() ;
    } 
    else if(type.toLowerCase() === 'post') {
        xhr.open('post' , url , async) ;
        // 添加请求头
        xhr.setRequestHeader('content-type' , 'application/x-www-form-urlencoded') ;
        xhr.send(params) ;
    }

    xhr.onreadystatechange = function() {
        if(xhr.readyState === 4 && xhr.status === 200) {
            let data = xhr.responseText ;
            if(dataType.toLowerCase() === 'json') {
                data = JSON.parse(data) ;
            }
            cb(data) ;
        }
    }

}